Interfaces

Descripcion

Como definir e implementar interfaces.

Cuando una clase implementa una interfaz se suele decir que se establece un contrato de manera que la clase se compromete a tener que implementar los métodos que hay en la interfaz.

Implementacion

Hay muchas interfaces predefinidas que podemos usar en nuestras clases, por ejemplo IComparable, esta interfaz obliga a definir un metodo CompareTo cuyo objetivo es comparar dos objetos.

Para implementar una interfaz en una clase simplemente tenemos que poner dos puntos (:) y a continuación el nombre de la interfaz, después a mayores tenemos que implementar los metodos que nos exisge la interfaz.

En el siguiente ejemplo implementamos la interfaz IComparable en la clase persona:

namespace PersonaApp
{
    public class Persona : IComparable<Persona>
    {
        string nombre;

        public Persona(string nombre)
        {
            this.nombre = nombre;
        }

        public int CompareTo(Persona? other)
        {
            return nombre.CompareTo(other?.nombre);
        }
    }
}

NOTA: La interfaz IComparable tiene dos implementaciones posibles. una con generics para indicar un tipo de dato concreto (como en este caso pesrona) y otra con la clase object.

Definir interfaces

Para definir nuestras propias interfaces lo hacemos de la siguiente manera usando la palabra reservada interface:

namespace PersonaApp
{
    public interface IEstudiante
    {
        int SumarNotas();
    }
}

Los metodos que se indican en la interfaz siempre serán públicos ya que solo se indican los métodos que serán accesibles a la hora de utilizar la clase de manera externa.

A continuación implementamos la interfaz y sus metodos requeridos en la clase persona:


namespace PersonaApp
{
    public class Persona : IEstudiante
    {
        string nombre;
        List<int> listaNotas;

        public Persona(string nombre)
        {
            this.nombre = nombre;

            listaNotas = new List<int>();

            listaNotas.Add(6);
            listaNotas.Add(8);
            listaNotas.Add(9);
            listaNotas.Add(6);

        }

        public int SumarNotas()
        {
            int suma = 0;

            listaNotas.ForEach(x => suma += x);

            return suma;
        }
    }
}
Tags

C# | Interfaces